package Funcionalidad;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Usuarios {

    private static final String controlador = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql://localhost/flog";
    private static final String usuario = "root";
    private static final String clave = "";


    static {
        try {
            Class.forName(controlador);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Error creating driver" + " class. Cause: " + e);
        }
    }

    public static Usuario ResultSetToUsuario(ResultSet resultado) throws SQLException {
        Usuario usuario = new Usuario(resultado.getString("user"), resultado.getString("pass"), resultado.getString("email"), resultado.getInt("rol"));
        return usuario;
    }
//devuelve una lista con los usuarios existentes
    public static List<Usuario> consultaUsuarios()
            throws Exception {

        Connection conexion = (com.mysql.jdbc.Connection) DriverManager.getConnection(url, usuario, clave);
        List<Usuario> lista = new ArrayList<Usuario>();
        //solicitud/recepcion de peticiones
        Statement solicitud = (Statement) conexion.createStatement();
        ResultSet resultados = solicitud.executeQuery("SELECT * FROM usuario");
        while (resultados.next()) {
            Usuario user = Usuarios.ResultSetToUsuario(resultados);
            lista.add(user);
        }
        resultados.close();
        solicitud.close();
        conexion.close();
        return lista;
    }
//Devuelve nulo si el usuario no existe,
    public static List<Usuario> compruebaUsuario(String user, String pass)
            throws Exception {
        int num = 0;
        Connection conexion = (com.mysql.jdbc.Connection) DriverManager.getConnection(url, usuario, clave);
        List<Usuario> lista = new ArrayList<Usuario>();
        //solicitud/recepcion de peticiones
        Statement solicitud = (Statement) conexion.createStatement();
        //
        ResultSet resultados2 = solicitud.executeQuery("SELECT count(*) as numero FROM usuario WHERE user='" + user + "'AND pass='" + pass + "'");
        while (resultados2.next()) {
            num = Integer.parseInt(resultados2.getString("numero"));
        }
        if (num != 0) {
            ResultSet resultados = solicitud.executeQuery("SELECT * FROM usuario WHERE user='" + user + "'AND pass='" + pass + "'");
            while (resultados.next()) {
                Usuario user1 = Usuarios.ResultSetToUsuario(resultados);
                lista.add(user1);
            }
            resultados.close();
        } else {
            lista = null;
        }
        resultados2.close();
        solicitud.close();
        conexion.close();
        return lista;
    }
//inserta un nuevo usuario con los datos que le pasamo scomo parametros
    public static boolean InsertaUsuario(String user, String pass, String email)
            throws Exception {
        int num = 0;
        boolean res = true;
        Connection conexion = (com.mysql.jdbc.Connection) DriverManager.getConnection(url, usuario, clave);
        //solicitud/recepcion de peticiones
        Statement solicitud = (Statement) conexion.createStatement();
        //
        ResultSet resultados2 = solicitud.executeQuery("SELECT count(*) as numero FROM usuario WHERE user='" + user + "'");
        while (resultados2.next()) {
            num = Integer.parseInt(resultados2.getString("numero"));
        }
        if (num == 0) {
            try {
                int s = solicitud.executeUpdate("INSERT INTO usuario VALUES('" + user + "','" + pass + "','" + email + "',2)");
            } catch (Exception e) {
                System.out.println("No se ha podido insertar el usuario por: " + e.getMessage());
            }
        } else {
            res = false;
        }
        resultados2.close();
        solicitud.close();
        conexion.close();
        return res;
    }
//borra el usuario que le pasamos como parametro
    public static void borraUsuario(String user) throws Exception {
        Connection conexion = (com.mysql.jdbc.Connection) DriverManager.getConnection(url, usuario, clave);
        //solicitud/recepcion de peticiones
        Statement solicitud = (Statement) conexion.createStatement();
        int s = solicitud.executeUpdate("DELETE FROM usuario WHERE user='" + user + "'");
        solicitud.close();
        conexion.close();
    }
}